package com.sky.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;


/**
 * 配置类
 * 多线程  （数字一般不能写死，写在配置文件中）
 * 一般线程 无所谓，一般定义当前cpu核心数*2[availableProcessors()]，如果当前核心数是8核，那就定义8/16.
 * 最大线程数 一般保持一致，
 */
@Configuration
public class ThreadConfig {


    @Bean
    public ThreadPoolExecutor ThreadPoolExecutor() {
        return new ThreadPoolExecutor(
                //主线程数     最大线程
                10, 20,
                //空闲线程存活时间，多余的线程存活时间  数字一般不能写死，写在配置文件中
                10, TimeUnit.SECONDS,
                //任务队列
                new LinkedBlockingDeque<>(10),
                //拒绝策略
                new ThreadPoolExecutor.CallerRunsPolicy()
        );

    }
}